package com.atguigu.gmall.product.service;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface BaseManageService {
    /**
     * 查询一级分类数据
     * @return
     */
    List<BaseCategory1> getCategory1();
    /**
     * 查询二级分类数据
     * @return
     */
    List<BaseCategory2> getCategory2(long category1Id);

    /**
     * 查询三级分类数据
     * @return
     */
    List<BaseCategory3> getCategory3(Long category2Id);
    /**
     * 根据分类Id 获取平台属性集合
     */
    List<BaseAttrInfo> attrInfoList(Long category1Id, Long category2Id, Long category3Id);
    /**
     * 保存平台属性
     */
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);
    /**
     *根据平台属性Id 获取到平台属性值集合
     */
    List<BaseAttrValue> getAttrValueList(Long attrId);
    /**
     *根据平台属性Id 获取到平台属性
     */
    BaseAttrInfo getAttrInfoList(Long attrId);

    /**
     * 获取spu    分页列表spu
     * @param iPage
     * @param spuInfo
     * @return
     */
    IPage getSpuInfoPage(IPage iPage, SpuInfo spuInfo);

    /**
     * 获取销售属性数据
     * @return
     */
    List<BaseSaleAttr> getBaseSaleAttrList();
    /**
     * spu大保存
     * @param spuInfo
     * @return
     */
    void saveSpuInfo(SpuInfo spuInfo);
    /**
     * spuImage信息显示
     */
    List<SpuImage> getSpuImageList(Long spuId);
    /**
     * 根据spuId 查询销售属性
     */
    List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);
    /**
     * 保存SkuInfo  简称大保存  保存一个sku所有信息
     * @param skuInfo
     * @return
     */
    void saveSkuInfo(SkuInfo skuInfo);

    /**
     * sku分页
     * @param skuInfoPage
     * @return
     */
    IPage getList(Page<SkuInfo> skuInfoPage);
    //上架
    void onSale(Long skuId);
    //下架
    void cancelSale(Long skuId);
    //查询出数据skuInfo  + skuImages
    SkuInfo getSkuInfo(Long skuId);
    //获取sku价格
    BigDecimal getSkuPrice(Long skuId);
    //查询spu海报
    List<SpuPoster> getSpuPosterBySpuId(Long spuId);
    //  根据三级分类Id 来获取分类名称等数据！
    BaseCategoryView getCategoryView(Long category3Id);
    //回显销售属性+销售属性值并锁定！
    //  根据spuId,skuId 来获取数据！
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);
    //  获取商品的规格参数，：获取商品的平台属性平台属性值！
    List<BaseAttrInfo> getAttrList(Long skuId);
    //  根据spuId 获取数据！
    Map getSkuValueIdsMap(Long spuId);
    //获取首页数据
    List<JSONObject> getBaseCategoryList();
    /**
     * 通过品牌Id 集合来查询数据
     * @param tmId
     * @return
     */
    BaseTrademark getTrademarkByTmId(Long tmId);
}
